import Pubsub from 'pubsub-js';
import moment from 'moment';
import request from '../../../utils/request';
const appInstance = getApp();
Page({
  /**
   * 页面的初始数据
   */
  data: {
    isPlay: false, // 播放判断
    song: {}, // 歌曲详情
    musicLink: '', // 音乐链接
    currentTime: '00:00', //实时时间
    durationTime: '00:00', //总时间
    currentTimeBar: 0 // 实时进度条宽度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 通过路由传参获取musicId
    let musicId = options.musicId;
    // 通过id获取音乐信息
    this.getMusicInfo(musicId);

    // 音乐播放实例
    this.backgroundAudioManager = wx.getBackgroundAudioManager();

    // 判断当前音乐是否已播放
    if (
      appInstance.globalData.isMusicPlay &&
      appInstance.globalData.musicId === musicId
    ) {
      this.setData({
        isPlay: true
      });
    }

    // 监听背景音乐播/暂停/停止事件
    this.backgroundAudioManager.onPlay(() => {
      this.changePlayState(true);
      // appInstance.globalData.musicId = this.data.song.id;
      appInstance.globalData.musicId = musicId;
    });
    this.backgroundAudioManager.onPause(() => {
      this.changePlayState(false);
    });
    this.backgroundAudioManager.onStop(() => {
      this.changePlayState(false);
    });
    // 背景音乐播放结束事件
    this.backgroundAudioManager.onEnded(() => {
      // 自动切换到下一首
      Pubsub.publish('switchType', 'next');
      // 实施进度条长度还原为0
      this.setData({
        currentTimeBar: 0,
        currentTime: '00:00'
      })
    });
    // 监听背景音乐播放进度时间
    this.backgroundAudioManager.onTimeUpdate(() => {
      // 获取当前时间毫秒 格式化 秒
      let currentTime = moment(this.backgroundAudioManager.currentTime * 1000).format(
        'mm:ss'
      );
      // 设置进度条宽度
      let currentTimeBar =
        (this.backgroundAudioManager.currentTime / this.backgroundAudioManager.duration) *
        450;
      this.setData({
        currentTime,
        currentTimeBar
      });
    });
  },

  // 修改播放状态
  changePlayState(isPlay) {
    this.setData({
      isPlay
    });
    // 修改全局播放状态
    appInstance.globalData.isMusicPlay = isPlay;
  },

  // 点击播放图标回调
  handleMusicPlay() {
    // console.log('handleMusicPlay');
    let isPlay = !this.data.isPlay;
    // this.setData({
    //   isPlay
    // });
    this.musicControl(isPlay, this.data.song.id, this.data.musicLink);
  },
  // 获取歌曲详情
  async getMusicInfo(musicId) {
    // console.log(typeof musicId);
    let songData = await request('song/detail', {
      ids: musicId
    });
    // 获取歌曲总时长
    let durationTime = moment(songData.songs[0].dt).format('mm:ss');
    this.setData({
      song: songData.songs[0],
      durationTime
    });
    // 修改窗口标题
    wx.setNavigationBarTitle({
      title: this.data.song.name
    });
  },
  // 获取音乐地址
  async musicControl(isPlay, songId, musicLink) {
    if (isPlay) {
      if (!musicLink) {
        // let songId = this.data.song.id;
        let songData = await request('song/url', {
          id: songId
        });
        musicLink = songData.data[0].url;
        this.setData({
          musicLink
        });
      }

      let songLink = musicLink;
      let songName = this.data.song.name;

      this.backgroundAudioManager.title = songName;
      this.backgroundAudioManager.src = songLink;
    } else {
      this.backgroundAudioManager.pause();
    }
  },
  // 上一首、下一首回调
  handleSwitch(e) {
    let type = e.currentTarget.id;
    // 关闭当前播放的音乐
    this.backgroundAudioManager.stop();
    // 发布事件消息给recommendSong页面
    Pubsub.publish('switchType', type);
    // 订阅recommendSong页面发布的musicId消息
    Pubsub.subscribe('musicId', (event, musicId) => {
      // console.log('musicId: ', musicId);
      // 获取音乐详情
      this.getMusicInfo(musicId);
      // 播放音乐
      this.musicControl(true, musicId);
      // 取消订阅
      Pubsub.unsubscribe('musicId');
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {}
});